package com.ai.plug.core.parser.tool.des;

import org.springframework.ai.util.ParsingUtils;

import java.lang.reflect.Method;

/**
 * todo
 *  模板方法模式定义了解析的整体流程框架
 *  策略模式允许使用不同的解析策略
 *  工厂模式提供了默认实现
 *  访问者模式实现了对目标对象（Method、Class）的访问
 */

/**
 * @author 韩
 * 需要重新getName    提取解析工具描述(description)
 */
public abstract class AbstractDesParser {

    /**
     * 默认逻辑是直接通过反射获取方法名，进行返回 对类不进行操作直接以驼峰命名的形式返回
     */
    /**
     * 默认Tool 的 工具描述(description)解析逻辑
     * @param toolMethod 工具方法
     * @param toolClass 工具类
     * @return 返回执行默认解析逻辑后的工具描述(String)
     */
    public static String doDefaultParse(Method toolMethod, Class<?> toolClass) {
        return ParsingUtils.reConcatenateCamelCase(toolMethod.getName(), " ");
    }
    /**
     * 这是模板方法设计模式(Template Method Pattern)。
     * 
     * 模板方法模式定义了一个操作中的算法骨架，而将一些步骤延迟到子类中。
     * 使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
     * 
     * 在这个类中：
     * 1. doDefaultParse方法提供了默认的解析逻辑实现
     * 2. doDesParse抽象方法定义了解析的接口，由子类具体实现
     * 3. 整体的解析流程框架在抽象类中已经定义好
     * Tool 的 工具描述(description)解析逻辑, 供子类重写
     * @param method 工具方法
     * @param toolClass 工具类
     * @return 返回执行解析逻辑后的工具描述(String)
     */
    public abstract String doDesParse(Method method, Class<?> toolClass) ;


}
